// fileUploader.js - 处理文件上传相关功能

const FileUploader = {
    // 属性
    data: {
        selectedFile: null,      // 当前选择的文件对象
        uploadedFiles: [],       // 已上传的文件列表
        uploadingFile: false,    // 文件上传状态
    },
    
    // 初始化
    init() {
        //console.log("[FileUploader] 初始化完成");
        return this;
    },
    
    // 处理文件上传
    handleFileUpload(event, callback) {
        const file = event.target.files[0];
        if (!file) return;
        
        // 检查文件是否已经上传
        const isDuplicate = this.data.uploadedFiles.some(existingFile => 
            existingFile.name === file.name && existingFile.size === file.size
        );
        
        if (isDuplicate) {
            alert('该文件已上传，请勿重复上传');
            // 清除文件选择
            this.removeFile();
            return;
        }
        
        // 保存当前选择的文件
        this.data.selectedFile = file;
        this.data.uploadingFile = true;
        
        //console.log("[FileUploader] 上传文件:", file.name);
        
        // 创建表单数据
        const formData = new FormData();
        formData.append('file', file);
        
        // 发送到文件上传接口
        fetch('/api/upload-file', {
            method: 'POST',
            body: formData
        })
        .then(response => response.json())
        .then(data => {
            if (data.error) {
                //console.error("[FileUploader] 上传错误:", data.error);
                alert('文件上传失败: ' + data.error);
                return;
            }
            
            //console.log("[FileUploader] 上传成功:", data);
            
            // 将文件添加到上传列表中
            this.data.uploadedFiles.push({
                id: data.fileId,
                name: data.fileName,
                size: data.fileSize,
                analysis: data.analysis
            });
            
            // 清除文件选择
            this.removeFile();
            this.data.uploadingFile = false;
            
            // 回调通知 - 确保传递一个全新数组以触发响应式
            if (callback && typeof callback === 'function') {
                callback([...this.data.uploadedFiles]);
            }
        })
        .catch(error => {
            //console.error('[FileUploader] 文件上传出错:', error);
            alert('文件上传失败，请重试');
        })
        .finally(() => {
            this.data.uploadingFile = false;
        });
    },

    // 移除已上传的文件
    removeUploadedFile(fileId, callback) {
        //console.log("[FileUploader] 移除文件:", fileId);
        const index = this.data.uploadedFiles.findIndex(file => file.id === fileId);
        if (index !== -1) {
            this.data.uploadedFiles.splice(index, 1);
            // 回调通知
            if (callback && typeof callback === 'function') {
                callback(this.data.uploadedFiles);
            }
        }
    },
    
    // 移除当前选择的文件
    removeFile() {
        this.data.selectedFile = null;
        const fileInput = document.querySelector('input[type="file"]');
        if (fileInput) {
            fileInput.value = '';
        }
    },

    // 清除所有上传的文件
    clearUploadedFiles() {
        //console.log("[FileUploader] 清除所有文件");
        this.data.uploadedFiles = [];
        return [];
    },

    // 格式化文件大小
    formatFileSize(size) {
        if (size < 1024) {
            return size + ' B';
        } else if (size < 1024 * 1024) {
            return (size / 1024).toFixed(2) + ' KB';
        } else if (size < 1024 * 1024 * 1024) {
            return (size / (1024 * 1024)).toFixed(2) + ' MB';
        } else {
            return (size / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
        }
    }
};

// 导出模块
window.FileUploader = FileUploader;

// 自动初始化
document.addEventListener('DOMContentLoaded', () => {
    FileUploader.init();
});